// 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。

// 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。

// 你可以假设除了整数 0 之外，这个整数不会以零开头。

int* plusOne(int* digits, int digitsSize, int* returnSize){
    int c = 1, i = digitsSize - 1;
    while (c && i >= 0) { // 直到没有进位
        c = (digits[i] + c) / 10;   // 先判断下一次是否产生进位
        digits[i] = (digits[i] + 1) % 10;   // 加上进位
        i--;
    }
    int len = (i < 0 && c)? (digitsSize+1):digitsSize;
    int *res = malloc(sizeof(int)*len);
    if (len > digitsSize) { // 最终的进位
        res[0] = 1;   
        for(int i = 1; i < len; i++) 
            res[i] = digits[i-1];
    } else {
        for(int i = 0; i < len; i++) 
            res[i] = digits[i];
    }

    *returnSize = len;
    return res;
}